package dancereal;

public class J29_BaseClass {

	/* 기본 클래스 base class
	 * 일부 인터페이스가 많은 추상 메서드 ABCDE 를
	 * 가지고 있는 경우, 이것을 구현하는 클래스는
	 * 이 모든 메서드 ABCDE 를 재정의 해야 함
	 * 하지만, 실제 사용하는 메서드C가 일부라면
	 * 불필요한 메서드 ABDE를 재정의하는 것은
	 * 지루하고 비효율적인 작업이 될 수 있음
	 * 
	 * 이런 경우 구현클래스를 일반클래스로 확장하여
	 * 수정하기를  원하는 메서드만 재정의함
	 * 이러한 용도로 사용하는 클래스를 
	 * base class 라고 함
	 * 아래 예 에서는 BadInterface 를 구현한 
	 * BadClass 를 확장하여 GoodClass1,
	 * GoodClass2를 만듦
	 * 
	 * 자바 웹 프로그래밍에서 서블릿 클래스를 만들때 
	 * Servlet 은 5개의 추상 메서드를 포함한 
	 * 인터페이스를 사용함
	 * 이런 경우 다 사용하지 않음에도 불구하고
	 * 5개의 추상메서드에 대한 구현 코드를 모두 작성
	 * 이에 대한 해결책으로 GenericServlet 이라는 
	 * 클래스를 확장해서 단 하나의 메서드, 
	 * service 메서드만 재정의해서 사용하면 됨
	 * 여기서 GenericServlet은 base class 임
	 * 
	 */
	
	public static void main(String[] args) {
	

	}

}

interface BadInterface{
	void A();
	char B();
	int C();
	String D();
	boolean E();
}

class BadClass implements BadInterface{

	@Override
	public void A() {   }
	@Override
	public char B() {return 0;}
	@Override
	public int C() {return 0;}
	@Override
	public String D() {return null;}
	@Override
	public boolean E() {return false;}
	
}

class GoodClass1 extends BadClass{
	@Override public int C() {return super.C();}	
}

class GoodClass2 extends BadClass{
	@Override public void A() {super.A();}
	@Override public boolean E() {return super.E();}
}

